package com.enlorenz.core.engine;

import com.enlorenz.core.base.IName;
import com.enlorenz.core.engine.exception.EngineControlException;


/**
 * Engine接口
 * 任何拥有类引擎行为的对象(启动、停止、重启等)应实现的接口
 * 比如说需要启动停止的通信通道
 * @author lcb
 */
public interface IEngine extends IName{
	/**
	 * 初始化
	 * 实现一些必要参数、数据的初始化
	 */
	void init() throws EngineControlException;
	/**
	 * 是否存活
	 * 检查该Engine是否正常运行
	 * @return	是否存活
	 */
	boolean isAlive();
	/**
	 * 启动引擎
	 */
	void start() throws EngineControlException;
	/**
	 * 重启引擎
	 */
	void restart() throws EngineControlException;
	/**
	 * 强制重启
	 * 如果不具备重启的条件
	 * 也必须重启的强制方法
	 */
	void forceRestart() throws EngineControlException;
	
	/**
	 * 关闭引擎
	 */
	void shutdown() throws EngineControlException;
	
}
